java通过JSP获取JSON到JS
我在从servlet中获取JSON字符串时遇到了一些问题,将JSP页面转换为JavaScript并导入到Vakata/JStree中
这就是我当前代码的样子
Servlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Du är nu i DoGet MarketDataServlet");
TreeBranchStringBuilder tbsb = new TreeBranchStringBuilder();
request.setAttribute("marketgrouplistJSONString", tbsb.getTreeBranchString(mm.getAllMarketgroups(), im.getAllItems()));
request.getRequestDispatcher("/marketdata.jsp").forward(request, response);
}
JSP/HTML:
<div id="market_tree_branches">
</div>
<div id="hidden"><%= request.getAttribute("marketgrouplistJSONString") %></div>
JavaScript:
var marketnitemsString = $("#hidden").text();
console.log(marketnitemsString)
$('#market_tree_branches').jstree({
'core' : {
'data' : marketnitemsString
}
});
从我的JSP生成的字符串如下所示:
[{"id":2,"text":"Blueprints","parent":"#"},{"id":204,"text":"Ships","parent":"2"},{"id":209,"text":"Ship Equipment","parent":"2"},{"id":211,"text":"Ammunition \u0026 Charges","parent":"2"},{"id":357,"text":"Drones","parent":"2"},{"id":943,"text":"Ship Modifications","parent":"2"},{"id":1041,"text":"Manufacture \u0026 Research","parent":"2"},{"id":1338,"text":"Structures","parent":"2"},{"id":9,"text":"Ship Equipment","parent":"#"},{"id":10,"text":"Turrets \u0026 Bays","parent":"9"}]
这是我在Chrome控制台日志中遇到的错误:
Uncaught Error: Syntax error, unrecognized expression:
[{"id":2,"text":"Blueprints","parent":"#"},{"id":204,"text":"Ships","parent":"2"},{"id":209,"text":"Ship Equipment","parent":"2"},{"id":211,"text":"Ammunition \u0026 Charges","parent":"2"}, ........
因为我不能从JSP/JSP中猜出什么是错误的变量,所以我不能从JSP/JSP中猜出什么是错误的。但是,如果我将HTML中的整个字符串复制/粘贴到“数据”中,效果很好
# 1 楼答案
最好的选择是使用从JavasScript代码直接到servlet的AJAX调用。绝对没有理由让JSP在中间。你可以这样做:
对于JavaScript方面,这完全取决于您想要使用什么JavaScript框架JQuery is the easiest starting point为了这个
# 2 楼答案
我不知道你为什么要穿过一个隐藏的元素:
由于
<% %>
是在解析js之前执行的,因此它生成的文本随后会被客户机解释为标准js,只要语义正确,它就会执行应该执行的操作(在变量中存储一个数组)这与我实际使用的代码非常相似,所以我相当确定它可以工作,即使我目前无法测试它
另外,如果你的数据是一个数组,我不确定核心是什么。数据元素可以以字符串的形式接受它:
http://www.jstree.com/api/#/?f=$.jstree.defaults.core.data
所以这可能是代码问题的根源